package com.guit.hrms.mapper;

import com.guit.hrms.dto.UpdateDTO;
import com.guit.hrms.po.Employee;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UpdateMapper {
    /**
     * 更新员工信息
     * @param updateDTO 更新信息
     * @return 更新条数
     */
    Integer updateInfo(UpdateDTO updateDTO);

    /**
     * 管理员更新员工信息
     * @param updateDTO 更新信息
     * @return 更新条数
     */
    Integer updateProfile(UpdateDTO updateDTO);

    /**
     * 根据员工id查询员工信息
     * @param employeeId 员工id
     * @return 员工信息
     */
    @Select("select * from employees where employee_id = #{employeeId}")
    Employee getById(String employeeId);

    /**
     * 更新员工密码
     * @param employeeId 员工id
     * @param password   更新后的密码
     * @return 更新条数
     */
    @Update("update employees set password = #{password} where employee_id = #{employeeId}")
    Integer updatePassword(String employeeId, String password);

    /**
     * 新增员工信息
     * @param updateDTO 员工信息
     * @return 新增条数
     */
    @Insert("Insert Into employees (employee_id, username,password, gender, age, birthday, phone_number, email, department, position, dept_type)   " +
            "VALUES(#{employeeId},#{username},#{password},#{gender},#{age},#{birthday},#{phoneNumber},#{email},#{department},#{position},#{deptType})")
    Integer insertInfo(UpdateDTO updateDTO);

    /**
     * 批量删除员工
     */

    Integer deleteById(List<String> ids);

    /**
     * 根据员工号新增角色
     * @param updateDTO 员工信息
     * @return 新增条数
     */
    @Insert("insert into employee_roles(employee_id, role_id) VALUES(#{employeeId},#{roleId})")
    Integer insertRole(UpdateDTO updateDTO);

    /**
     * 根据员工号删除角色
     * @param ids 员工号
     * @return 删除条数
     */
    Integer deleteEmpRole(List<String> ids);

    /**
     * 修改员工角色
     * @param updateDTO 更新信息
     * @return 修改条数
     */
    @Update("update employee_roles set role_id = #{roleId} where employee_id = #{employeeId}")
    Integer updateRole(UpdateDTO updateDTO);

    /**
     * 创建新账号
     * @param updateDTO 更新信息
     * @return 新增条数
     */
    @Insert("insert into employees(employee_id, password) VALUES(#{employeeId}, #{password})")
    Integer createNewAccount(UpdateDTO updateDTO);

    /**
     * 绑定账号
     * @param employee 员工信息
     * @return 更新条数
     */
    @Update("update employees set username = #{username}, phone_number = #{phoneNumber}, email = #{email}, department = #{department},  position = #{position}, dept_type = #{deptType}, interviewee_id = #{intervieweeId} where employee_id = #{employeeId}")
    Integer bindingAccount(Employee employee);

    /**
     * 解绑微信账号
     * @param employeeId 员工id
     * @return 更新条数
     */
    @Update("update employees set open_id = null where employee_id = #{employeeId}")
    Integer resetWx(String employeeId);
}

